package leetcode.秋招.同城;

import org.junit.Test;

import java.util.*;


public class Solution {

    @Test
    public void test() throws InterruptedException {
        ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        lists.add(arrayList);
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        arrayList1.add(3);
        arrayList1.add(4);
        arrayList1.add(5);
        lists.add(arrayList1);
        ArrayList<Integer> arrayList2 = new ArrayList<>();
        arrayList2.add(3);
        arrayList2.add(4);
        arrayList2.add(5);
        lists.add(arrayList2);
        ArrayList<Integer> arrayList3 = new ArrayList<>();
        arrayList3.add(4);
        arrayList3.add(5);
        arrayList3.add(6);
        lists.add(arrayList3);
        ArrayList<Integer> arrayList4 = new ArrayList<>();
        arrayList4.add(7);
        arrayList4.add(8);
        arrayList4.add(9);
        lists.add(arrayList4);
        ArrayList<Integer> arrayList5 = new ArrayList<>();
        arrayList5.add(8);
        arrayList5.add(9);
        lists.add(arrayList5);
        ArrayList<Integer> arrayList6 = selected_car(lists);
        System.out.println(arrayList6);
    }
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 返回值为集合，集合内容为对应下标用户所抢到的车位， 如果没有抢到，则为-1.
     例如：[1,2,-1]， 标识用户0抢到1号车位，用户1抢到2号车位，用户2没有抢到车位
     * @param pre_selected_cars int整型ArrayList<ArrayList<>> 用户预选车位，第一个ArrayList代表用户，下标索引即为用户id，嵌套的ArrayList代表预选的车位列表。例如：[[1,2],[2,3]]，表示用户0预选1、2车位， 用户1预选2、3车位
     * @return int整型ArrayList
     */
    private boolean[] carStops = new boolean[10];
    Map<Integer, Integer> map = new HashMap<>();
    List<Integer> res = new ArrayList<>();
    public ArrayList<Integer> selected_car (ArrayList<ArrayList<Integer>> pre_selected_cars) throws InterruptedException {
        // write code here
        int size = pre_selected_cars.size();
        for (int i = 0; i < size; i++) {
            int finalI = i;
            new Thread(() -> {
                ArrayList<Integer> list = pre_selected_cars.get(finalI);
                for (int j = 0; j < list.size(); j++) {
                    if (!carStops[list.get(j)]) {
                        carStops[list.get(j)] = true;
                        map.put(finalI, list.get(j));
                        res.add(finalI);
                        System.out.println(list.get(j));
                        break;
                    }
                }
            }).start();
        }
        Thread.sleep(1000);
        res.sort(Integer::compareTo);
        ArrayList<Integer> ans = new ArrayList<>();
        for (int j = 0; j < res.size(); j++) {
            ans.add(map.get(res.get(j)));
        }
        return ans;
    }
}
